比较数组、vector 对象和 array 对象

    #include <iostream>
    #include <vector> // STL C++98
    #include <array> // C++11

    int main(int argc, const char * argv[]) {

        using namespace std;
        int a1[4] = {1,2,3,4};
        vector<int> a2(4);

        a2[1] = 1;
        a2[2] = 2;
        a2[3] = 3;
        a2[4] = 4;

        array<int, 4> a3 = {3,4,5,6};
        array<int, 4> a4 = a3; // 可以直接赋值 数组须逐元素赋值

        cout << "a1[2] :" << a1[2] << " at " << &a1[2] << endl;  // 栈(静态存储区)
        cout << "a2[2] :" << a2[2] << " at " << &a2[2] << endl;  // 自由存储区或堆
        cout << "a3[2] :" << a3[2] << " at " << &a3[2] << endl;  // 栈(静态存储区)
        cout << "a4[2] :" << a4[2] << " at " << &a4[2] << endl;

        a1[-2] = 20; // 表示 *(a1-2)=20 C++也不检查这种越界错误 表明数组的行为是不安全的

        // vector和array也可以使用上面的方式,然后,还有其他选择
        a2.at(1) = 10;  // 使用at()时,将在运行期间捕获非法索引。
        a3.at(1) = 5;

        // 它们包含成员函数begin()和end(),让您能够确定边界。
        vector<int>::iterator p1 = a2.begin();
        array<int, 4>::iterator p2 = a3.end();

        return 0;
    }